package com.example.game_app.adapter;

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;

import com.example.game_app.R;
import com.example.game_app.ViewPagerActivity;
import com.example.game_app.fragment.GameStrategyViewFragment;
import com.example.game_app.list.GameStrategyActivity;

import org.w3c.dom.Text;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GameListAdapter extends ArrayAdapter<Map<String, String>> {

    private Context context;
    private List<Map<String, String>> gameList;

    /**
     * 图片id 和图片的映射
     */
    private static final Map<String, Integer> IMAGE_RESOURCES_MAP = new HashMap<>();

    // TODO 每次新建游戏，都需要在此添加与文字与图片的绑定关系
    static {
        IMAGE_RESOURCES_MAP.put("warith", R.drawable.warith);
        IMAGE_RESOURCES_MAP.put("keli", R.drawable.keli);
        IMAGE_RESOURCES_MAP.put("mc", R.drawable.mc);
        IMAGE_RESOURCES_MAP.put("bengtie", R.drawable.bengtie);
        IMAGE_RESOURCES_MAP.put("dijia", R.drawable.dijia);
        IMAGE_RESOURCES_MAP.put("daai", R.drawable.daai);
    }

    public GameListAdapter(Context context, List<Map<String, String>> gameList) {
        super(context, R.layout.game_list_view, gameList);
        this.context = context;
        this.gameList = gameList;
    }

    /**
     * 在ListView中显示每个项目的视图。这是Adapter的一个方法，用于生成ListView中的每个视图。
     *
     * @param position    当前项目的索引位置。
     * @param convertView 可复用的视图对象，如果为null，则需要创建一个新的视图。
     * @param parent      视图的父容器。
     * @return 返回用于显示列表项的视图对象。
     */
    @NonNull
    @Override
    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
        ViewHolder viewHolder;

        // 检查convertView是否为空，如果为空，则需要初始化视图和ViewHolder对象
        if (convertView == null) {
            // 使用LayoutInflater从XML布局文件中加载游戏项的视图
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.game_item, parent, false);
            viewHolder = new ViewHolder();
            // 初始化ViewHolder中的文本视图和图像视图
            viewHolder.tvGameName = convertView.findViewById(R.id.gameName);
            viewHolder.tvGameDescription = convertView.findViewById(R.id.gameDescription);
            viewHolder.tvGameImage = convertView.findViewById(R.id.gameImage);
            viewHolder.gameStrategyButton = convertView.findViewById(R.id.gameStrategyButton);
            // 使用Tag将ViewHolder对象与视图关联，以便后续重用
            convertView.setTag(viewHolder);
        } else {
            // 如果convertView不为空，则直接从视图中获取ViewHolder对象
            viewHolder = (ViewHolder) convertView.getTag();
        }

        // 从getItem方法中获取当前位置的 游戏数据
        Map<String, String> game = getItem(position);
        if (game != null) {
            // 使用游戏数据填充视图：游戏名称和描述
            viewHolder.tvGameName.setText(game.get("gameName"));
            viewHolder.tvGameDescription.setText(game.get("gameDescription"));
            // 根据游戏名称获取对应的图像资源，并设置到图像视图上
            String gameImage = game.get("gameImage");
            // 尝试从映射中获取资源ID
            Integer resourceId = IMAGE_RESOURCES_MAP.get(gameImage);
            if (resourceId != null) {
                Drawable drawable = ContextCompat.getDrawable(context, resourceId);
                viewHolder.tvGameImage.setImageDrawable(drawable);
            } else {
                // 如果找不到对应的资源，记录错误日志
                Log.e("ImageLoader", "Resource not found for gameImage: " + gameImage);
            }
        }

        /**
         * 如果点击了查看攻略按钮
         * 跳转到ViewPagerActivity并传递攻略页面的索引便于跳转
         */
        viewHolder.gameStrategyButton.setOnClickListener(v -> {
            // 获取当前元素游戏名
            String GameName = game.get("gameName");
            Intent intent = new Intent(context, ViewPagerActivity.class);
            intent.putExtra("GameName", GameName);
            intent.putExtra("StrategyPosition", 3);
            // 跳转到ViewPagerActivity，为了设置position
            context.startActivity(intent);
        });
        // 返回填充后的视图对象
        return convertView;
    }

    // 列表项的视图缓存
    static class ViewHolder {
        TextView tvGameName;
        TextView tvGameDescription;
        ImageView tvGameImage;
        TextView gameStrategyButton;
    }

}
